package camera

// 相机控制器实例
var cameraControl = NewControl()

// GetList 获取相机列表
//
//	@return 相机列表
//	@return 错误信息
func GetList() (CameraInfoList, error) {
	// 获取相机列表
	list, err := cameraControl.GetList()
	if err != nil {
		return nil, err
	}
	// 追加默认分辨率
	for _, item := range list {
		tmp := make(CameraSupportInfoList, 0, len(item.SupportInfoList)+1)
		tmp = append(tmp, CameraDefaultSupportInfo.Clone())
		item.SupportInfoList = append(tmp, item.SupportInfoList...)
	}
	// OK
	return list, err
}

// GetInfoByID 通过相机ID获取缓存的相机信息
//
//	@var	id	相机ID
//	@return	缓存的相机信息
//	@return	异常信息
func GetInfoByID(id uint) (*CameraInfo, error) {
	return cameraControl.GetInfoByID(id)
}

// GetInfoByID 通过相机唯一固定值获取缓存的相机信息
//
//	@var	val	相机唯一固定值
//	@return	缓存的相机信息
//	@return	异常信息
func GetByUniqueFixedValue(val string) (*CameraInfo, error) {
	return cameraControl.GetByUniqueFixedValue(val)
}

// Open 打开相机
//
//	@var	id		相机ID
//	@var	info	分辨率信息
//	@return	异常信息
func Open(id uint, info CameraSupportInfo) error {
	// 关闭已打开的相机
	cameraControl.Close()
	// 打开新相机
	return cameraControl.Open(id, info)
}

// GetInfo 获取当前设备的信息
//
//	@return	当前设备的信息
//	@return	异常信息
func GetInfo() (string, error) {
	return cameraControl.GetInfo()
}

// GetSupportInfo 获取当前设备的支持信息
//
//	@return	当前设备的支持信息
//	@return	异常信息
func GetSupportInfo() (*CameraSupportInfo, error) {
	return cameraControl.GetSupportInfo()
}

// GetStream 获取图片流
//
//	@return	图片流
//	@return	异常信息
func GetStream() ([]byte, error) {
	return cameraControl.GetStream()
}

// Close 关闭已打开的相机
func Close() {
	cameraControl.Close()
}
